package cn.iocoder.yudao.module.wms.service.rdrecord07;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.wms.controller.admin.rdrecord07.vo.Rdrecord07PageReqVO;
import cn.iocoder.yudao.module.wms.controller.admin.rdrecord07.vo.Rdrecord07SaveReqVO;
import cn.iocoder.yudao.module.wms.dal.dataobject.rdrecord07.Rdrecord07DO;
import cn.iocoder.yudao.module.wms.dal.dataobject.rdrecord07.Rdrecords07DO;

import javax.validation.Valid;
import java.util.List;

/**
 * 调拨出库主 Service 接口
 *
 * @author 曾劲松
 */
public interface Rdrecord07Service {

    /**
     * 创建调拨出库主
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRdrecord07(@Valid Rdrecord07SaveReqVO createReqVO);

    /**
     * 提交调拨出库流程
     *
     * @param id 调拨出库id
     */
    void process(Long id);

    /**
     * 更新调拨出库主
     *
     * @param updateReqVO 更新信息
     */
    void updateRdrecord07(@Valid Rdrecord07SaveReqVO updateReqVO);

    /**
     * 更新调拨出库主状态
     *
     * @param id 编号
     * @param status 结果
     */
    void updateRdrecord07Status(Long id, Integer status);

    /**
     * 删除调拨出库主
     *
     * @param id 编号
     */
    void deleteRdrecord07(Long id);

    /**
     * 获得调拨出库主
     *
     * @param id 编号
     * @return 调拨出库主
     */
    Rdrecord07DO getRdrecord07(Long id);

    /**
     * 获得调拨出库主
     *
     * @param processInstanceId 流程实例id
     * @return 调拨出库主
     */
    Rdrecord07DO getRdrecord07ByProcessInstanceId(String processInstanceId);

    /**
     * 获得调拨出库主分页
     *
     * @param pageReqVO 分页查询
     * @return 调拨出库主分页
     */
    PageResult<Rdrecord07DO> getRdrecord07Page(Rdrecord07PageReqVO pageReqVO);

    /**
     * 调拨出库业务处理
     *
     * @param id 调拨出库单id
     * @param type 退(-1),进(1)
     */
    void businessProcessing(Long id, int type);

    // ==================== 子表（调拨出库子） ====================

    /**
     * 获得调拨出库子列表
     *
     * @param orderId 订单id
     * @return 调拨出库子列表
     */
    List<Rdrecords07DO> getRdrecords07ListByOrderId(Long orderId);

}